package com.sunrise.financeiro.servico;

import java.util.Collection;

import javax.annotation.Resource;

import lombok.Getter;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sunrise.crm.repositorio.iface.CidadeDao;
import com.sunrise.crm.repositorio.iface.EstadoDao;
import com.sunrise.crm.repositorio.iface.UsuarioDao;
import com.sunrise.financeiro.repositorio.iface.BoletoDao;
import com.sunrise.financeiro.repositorio.iface.ContaCedenteDao;
import com.sunrise.generico.entidade.Boleto;
import com.sunrise.generico.entidade.Cidade;
import com.sunrise.generico.entidade.ContaCedente;
import com.sunrise.generico.entidade.Estado;
import com.sunrise.generico.entidade.Usuario;
import com.sunrise.generico.visao.Filtro;

@Service
@Transactional(readOnly = true)
public class ManterBoletoService {

	@Resource(name = "boletoDaoImpl")
	@Getter
	private BoletoDao boletoDAO;

	@Resource(name = "usuarioDaoImpl")
	@Getter
	private UsuarioDao usuarioDAO;
	
	@Resource(name = "cidadeDaoImpl")
	@Getter
	private CidadeDao cidadeDAO;
	
	@Resource(name = "estadoDaoImpl")
	@Getter
	private EstadoDao estadoDAO;
	
	@Resource(name = "contaCedenteDaoImpl")
	@Getter
	private ContaCedenteDao contaCedenteDAO;

	public Collection<Boleto> buscarPorFiltros(Filtro filtro) {
		return getBoletoDAO().buscarPorFiltros(filtro);
	}

	public Cidade buscarCidadePorNome(String cidade) {
		return getCidadeDAO().buscarPorNome(cidade);
	}

	public Collection<Cidade> carregarCidadesPorEstado(Estado estado) {
		return getCidadeDAO().listarPorEstado(estado);
	}

	public Collection<ContaCedente> listarContasPorUsuario(Usuario obterUsuarioLogado) {
		return getContaCedenteDAO().listarPorUsuario(obterUsuarioLogado);
	}

	public Collection<Estado> listarEstados() {
		return getEstadoDAO().listarOrdenado();
	}

	public ContaCedente buscarConta(Long id) {
		return getContaCedenteDAO().getById(id);
	}

	public long gerarNossoNumero() {
		return getBoletoDAO().buscarUltimoNossoNumero();
	}
	
	@Transactional(readOnly = false)
	public void alterarContaCedente(ContaCedente contaCedente) {
		getContaCedenteDAO().alterar(contaCedente);
	}


}